The present invention pertains to the field of computer systems. More particularly, this invention pertains to the field of performing snoop operations in a multinode computer system.
Cache coherency is a critical element of any computer system. In network server computer systems, maintaining cache coherency is a difficult task due to the fact that a typical network server includes multiple processors working out of multiple caches. Some computer systems are based on a nodal architecture where several processors, their cache memories, and a block of system memory constitute a node. The computer system may include multiple nodes.
In a typical prior system, in order to maintain cache coherency, snoop filters are included in each node. This architecture may be referred to as a distributed snoop architecture. The snoop filters for each node track cache coherency protocol state information for all cache lines currently cached in any of that node""s processor caches. A popular cache coherency protocol is the MESI (modified, exclusive, shared, or invalid) protocol.
In a distributed snoop architecture, when one node wishes to read a line of data from a memory location, it first must ascertain whether any cache in the system has a copy of that line of data. It is possible for several copies of the line of data to exist in caches from several nodes and the copies may be cached in any of the states allowed in the MESI protocol. In order to determine which node has a copy of the line of data and in what states the line has been cached, the node wishing to read the line of data must query the all of other nodes. Thus, all nodes must be queried even though some of the nodes may have not cached the line data in question. This results in a waste of bus bandwidth and creates undesirable system overhead and increased latency.
Another prior system for maintaining cache coherency involves the use of snoop directories. In this architecture, each node with system memory includes a snoop directory. The snoop directories track information for all cache activities involving memory locations located at that node. Each snoop directory tracks which nodes have cached lines of data from the snoop directory node""s system memory and also tracks in which states those lines have been cached. Thus, with this distributed directory architecture, when a node (the xe2x80x9crequestingxe2x80x9d node) wishes to read from a memory location located at another node (the xe2x80x9chomexe2x80x9d node), the requesting node must contact the home node who consults its directory. The home node then issues snoop requests to any nodes that have cached copies of the memory lines in question. The various nodes then respond back to the home node and the home node can then provide the requested data to the requesting node. The steps of first contacting the home node and then the home node contacting the other nodes for snoop information can result in undesirable system overhead, particularly in computer systems whose nodes are coupled together via a switching device.